1. Field of Invention
This invention relates to the concatenation of block structured code and more particularly to such concatenation for the execution of programs written in the FORTRAN programming language.
2. Description of the Prior Art
Most computer systems made to this day are of the conventional von Neumann organization which has remained relatively unstructured with the objective of being "general purpose." However, over the past two decades, better understanding has been achieved in the exploitation of the potential of block-structured programming languages that represent complex algorithms. Block structuring of algorithms, i.e., nested declarations, is a natural form for the expression of such complex algorithms.
A particular computer system that was designed to employ such block-structure, or nested languages, (and also nested data structures) is described in the Barton, et al., U.S. Pat. Nos. 3,461,434; 3,546,677 and 3,548,384. These patents describe a stack-oriented data processor where the stack mechanism, a first-in last-out mechanism, handles the flow of operators and associated parameters in a manner which reflects the nested structure of particular higher level languages that are designed to handle natural forms for the expression of complex algorithms. Such languages include ALGOL and ALGOL-type languages, such as PL/1, EULER, and so forth, which are based on the block-structuring of algorithms, i.e., nested declarations. While this may appear to impose unnecessary constraints on system development, the resulting products, measured in terms of throughput and flexibility, suggest that design "constraints" may really have been design opportunities (E. I. Organick, Computer System Organization, Academic Press 1973).
A system of the type described in the above-identified Barton patents is oriented around the concept of a segmented memory and specially treated segments called stacks. The processor runs in an expression stack; operators take their arguments from the top of the stack and leave their results on the top of the stack. The data addressing space of the executing program is mapped into the stack as well as other stacks linked to it and data items referenced by descriptors contained in the stack structure.
In addition to the better representation of complex algorithms by such block structured languages, a computer system specifically adapted for execution of such block structured code requires fewer memory cycles for fetching of instructions than in a comparable FORTRAN or COBOL program executed on a less structured computer system. In these other systems, corresponding instructions occupy a larger number of bits since they employ index registers and/or base registers (but not stack-base descriptors) for accessing data. In a stack machine, however, more memory cycles may be required for the accessing of data. As a result, standard FORTRAN programs execute more slowly than corresponding ALGOL-like programs on a block structured machine. The semantics of certain FORTRAN declarations are such that the use of these declarations effectively forces a compiler to allocate contiguous blocks of storage for arrays that fall under the purview of these declarations. This is because FORTRAN was designed for a fixed-address machine (i.e., the IBM 704).
In spite of the advantages of block structured programs and systems that expedite their execution, FORTRAN programming is still widely used throughout the computer field particularly in engineering and scientific areas requiring data access to a large number of individual array elements.
An attempt to expedite data processing in a less structured language by a block structured machine is described in Desantis et al., U.S. Pat. No. 4,468,736. In this patent, the block structured code is received in sequence and divided into independent or at least semi-independent queues of concatenated code for separate execution by separate processors. A particular disadvantage of the Desantis et al. mechanism is that it has no provision for handling restarts should a section of code call for a branch into code already assigned to one of the queues.
It is, then, an object of the present invention to provide an improved system and method for concatenation of block structured code to execute less structured language code.
It is another object of the present invention to provide an improved system and method for conversion of block structured code into execution code for FORTRAN statements.
It is still a further object of the present invention to convert block structured data references into general register addresses to reduce the number of memory accesses required.